package com.yl.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.math.BigDecimal;
import java.security.Permission;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * 用户表
 *
 * @author zlj
 * @email 328727561@qq.com
 * @date 2024-04-17 11:28:08
 */
@Data
@TableName("sys_user")
public class UserEntity implements Serializable, UserDetails {
    private static final long serialVersionUID = 1L;

    /**
     * 用户id
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;
    /**
     * 用户登录名称
     */
    private String username;
    /**
     * 用户昵称
     */
    private String nickName;
    /**
     * 登录密码
     */
    private String password;
    /**
     * 账户是否过期(1-未过期、2-过期)
     */
    private boolean isAccountNonExpired = true;
    /**
     * 账户是否锁定(1-未锁定、2-锁定)
     */
    private boolean isAccountNonLocked = true;
    /**
     * 密码是否过期(1-未过期、2-过期)
     */
    private boolean isCredentialsNonExpired = true;
    /**
     * 账户是否可用(1-可用、2-不可用)
     */
    private boolean isEnabled = true;
    /**
     * 真实姓名
     */
    @TableField
    private String realName;
    /**
     * 所属部门id
     */
    private Long departmentId;
    /**
     * 所属部门名称
     */
    private String departmentName;
    /**
     * 性别(0-男、1-女)
     */
    private Integer gender;
    /**
     * 电话
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 头像地址
     */
    private String avatar;
    /**
     * 是否为管理员(1-管理员)
     */
    private Integer isAdmin;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 修改时间
     */
    private Date updateTime;
    /**
     * 是否删除(0-未删除、1-已删除)
     */
    private Integer isDelete;
    /**
     * 上级邀请码
     */
    private String superiorCode;
    /**
     * 我的邀请码
     */
    private String myCode;
    /**
     * 上级ID
     */
    private Long superiorId;
    /**
     * 积分总数
     */
    private BigDecimal integralCount;
    /**
     * 手机验证码
     */
    @TableField(exist = false)
    private String verificationCode;
    /**
     * 权限列表
     *
     * @return
     */
    @TableField(exist = false)
    Collection<? extends GrantedAuthority> authorities;

    /**
     * 查询用户权限表
     *
     * @return
     */
    @TableField(exist = false)
    private List<PermissionEntity> permissionList;

}
